#include "wnodeinfo.h"
#include <QMessageBox>
#include <QBoxLayout>
#include <QLabel>
#include <QScrollArea>


WNodeInfo::WNodeInfo(QTreeWidgetItem* item)
{
    bool convert=false; //bool controllo)

    QVariant q = item->data(0,Qt::UserRole);
    if (q.canConvert<Nodo*>()){

        convert = true;
        Nodo* nodo = q.value<Nodo*>();
        makeNodoInfo(nodo);
    }
    if (q.canConvert<Residuo*>()){

        convert = true;
        Residuo* res = q.value<Residuo*>();
        makeResiduoInfo(res);
    }

    if(!convert) QMessageBox::information(this, tr("Empty Field"), tr("Cannot convert Info"));
}

void WNodeInfo::makeNodoInfo(Nodo* nodo){

    //label dei nomi
    QVBoxLayout* key = new QVBoxLayout();

    //sistemo l'altezza del fattore pari a quella dell'area di scroll
    key->addWidget(new QLabel("Factor: "));
    key->addWidget(new QLabel(" ")); //la scrollarea ha lo spazio per lo scroll
    key->addWidget(new QLabel("Shift: "));
    key->addWidget(new QLabel("Lenght: "));
    //key->addWidget(new QLabel("Resti: "));

    key->insertSpacerItem(-1,new QSpacerItem(100,1000));

    //label dei valori
    QVBoxLayout* data = new QVBoxLayout();

    QLabel* fattore = new QLabel(nodo->fattore.c_str());
    QLabel* shift = new QLabel(tr("%1").arg(nodo->shift()));
    QLabel* lunghezza = new QLabel(tr("%1").arg(nodo->fattore.size()));
    //QLabel* resto = new QLabel(tr("%1").arg(nodo->resto));
    //QLabel* resti = new QLabel(nodo->resti.c_str());

    QScrollArea* scroll = new QScrollArea();
    scroll->setWidget(fattore);
    scroll->setMaximumSize(3+fattore->width(),3*fattore->height());

    data->addWidget(scroll);
    data->addWidget(shift);
    data->addWidget(lunghezza);
    //data->addWidget(resto);
    //data->addWidget(resti);

    data->insertSpacerItem(-1,new QSpacerItem(0,1000));

    //layout della pagina
    QHBoxLayout* layout = new QHBoxLayout();

    layout->addLayout(key);
    layout->addLayout(data);
    layout->setStretchFactor(data,70);
    layout->insertSpacerItem(-1,new QSpacerItem(1,1,QSizePolicy::Expanding, QSizePolicy::Minimum));
    this->setLayout(layout);



}

void WNodeInfo::makeResiduoInfo(Residuo* res){

    //label dei nomi
    QVBoxLayout* key = new QVBoxLayout();

    key->addWidget(new QLabel("Lenght: "));
    key->addWidget(new QLabel("Remainder: "));
    key->addWidget(new QLabel("Multiples: "));

    key->insertSpacerItem(-1,new QSpacerItem(100,1000));

    //label dei valori
    QVBoxLayout* data = new QVBoxLayout();

    QLabel* lunghezza = new QLabel(tr("%1").arg(res->lunghezza));
    QLabel* resto = new QLabel(tr("%1").arg(res->resto));
    QLabel* multipli = new QLabel(res->multipli.c_str());

    data->addWidget(lunghezza);
    data->addWidget(resto);
    data->addWidget(multipli);

    data->insertSpacerItem(-1,new QSpacerItem(0,1000));

    //layout della pagina
    QHBoxLayout* layout = new QHBoxLayout();
    layout->addLayout(key);
    layout->addLayout(data);
    layout->setStretchFactor(data,70);
    this->setLayout(layout);

}
